﻿// ***********************************************************************
// Assembly         : Delta_entidad
// Author           : Juan Alberto Cerino Gomez
// Created          : 02-18-2013
//
// Last Modified By : Juan Alberto Cerino Gomez
// Last Modified On : 06-03-2013
// ***********************************************************************
// <copyright file="Cat_campo_tecnico.cs" company="Delta Bussines">
//     Copyright (c) 2013  Delta Bussines. All rights reserved.
// </copyright>
// <summary></summary>
// ***********************************************************************
using System;
using System.Data;
using System.Data.SqlClient;
using System.Collections.Generic;
using Delta_util.Estaticos;
using Delta_entidad.Base;
using Delta_entidad.Atributos;

namespace Delta_entidad.EntidadesControl
{
    /// <summary>
    /// Entidad que representa la configuración dinámica de un campo de la base de datos, esta entidad indica la forma en que se representa un campo en el GridView y en el panel
    /// de edición.
    /// </summary>
    [Serializable]
    [AttEntidad("DG_Cat_campo_tecnico", "id_campo,id_tipo_gral", false, 0, true, true, Enumerados.TIPO_OPERACION_GRID.INSERTAR, Enumerados.TIPO_OPERACION_GRID.ACTUALIZAR, Enumerados.TIPO_OPERACION_GRID.ELIMINAR)]
    public class Cat_campo_tecnico : TipoBase, ITipo
    {


        /// <summary>
        /// Constructor de la clase.
        /// </summary>
        public Cat_campo_tecnico() {
            base.EsEntidadControl = true;
        }

        /// <summary>
        /// Variable que indica la clave del campo.
        /// </summary>
        private int _id_campo;
        /// <summary>
        /// Varibable que indica el nombre del campo.
        /// </summary>
        private string _nombre;
        /// <summary>
        /// Varibable que indica el titulo que se muestra para el campo.
        /// </summary>
        private string _titulo;
        /// <summary>
        /// Varibable que indica la clave del tipo de columna del campo.
        /// </summary>
        private Int16 _id_tipo_columna;
        /// <summary>
        /// Varibable que indica la columna EXCEL en la cual se leen los datos del campo al importar datos.
        /// </summary>
        private string _columna_doc;
        /// <summary>
        /// Varibable que indica la clave del tipo general del campo.
        /// </summary>
        private int _id_tipo_gral;
        /// <summary>
        /// Varibable que indica si el campo se debe mostrar en el GridView.
        /// </summary>
        private bool _mostrar_tabla;
        /// <summary>
        /// Varibable que indica si el campo es editable, es decir, si se muestra en el panel de edición.
        /// </summary>
        private bool _editable;
        /// <summary>
        /// Varibable que indica si el campo es de solo lectura.
        /// </summary>
        private bool _solo_lectura;
        /// <summary>
        /// Varibable que contiene la configuración del tipo de columna.
        /// </summary>
        private Cat_tipo_columna _tipo;
        /// <summary>
        /// Varibable que contiene la configuración del tipo de editor usado para el campo.
        /// </summary>
        private Cat_editor _tipo_editor;
        /// <summary>
        /// Varibable que contiene la configuración del filtro del campo.
        /// </summary>
        private Cat_filtro_campo _filtro;
        /// <summary>
        /// Varibable que contiene el editor usado para el panel de filtro.
        /// </summary>
        private Cat_editor _editorFiltro;
        /// <summary>
        /// Varibable que indica los campos de los cuales depende este campo.
        /// </summary>
        private string _dependencia;
        /// <summary>
        /// Varibable que indica el tamaño maximo de caracteres para el campo.
        /// </summary>
        private Int16 _tamanio;
        /// <summary>
        /// Varibable que indica si el campo es dinamico.
        /// </summary>
        private bool _es_dinamico;
        /// <summary>
        /// Varibable que indica si el campo es requerido, si es requerido se configura automaticamente el validador.
        /// </summary>
        private bool _requerido;
        /// <summary>
        /// Varibable que indica el nombre del tipo de columna.
        /// </summary>
        private string _nombre_tipo_columna;
        /// <summary>
        /// Varibable que indica el nombre del tipo general al que pertenece el campo.
        /// </summary>
        private string _nombre_tipo_gral;
        /// <summary>
        /// Varibable que indica el comentario que se  muestra en el panel de edición.
        /// </summary>
        private string _comentario;
        /// <summary>
        /// Varibable que indica el orden en que se muestra el campo.
        /// </summary>
        private Int16 _orden;
        /// <summary>
        /// Varibable que indica la clave del tipo de filtro usado para el campo.
        /// </summary>
        private Int16? _id_cat_filtro_campo;
        /// <summary>
        /// Obtiene o establece la clave del campo.
        /// </summary>
        /// <value>Clave del campo.</value>
        [AttrParametro(System.Data.SqlDbType.Int, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR, Enumerados.TIPO_QUERY.OBTENER, Enumerados.TIPO_QUERY.ELIMINAR)]
        [AttPropiedad("Clave", false, true, false, false, Enumerados.TIPO_EDITOR.TEXBOX, null, 1)]
        public int id_campo
        {
            get { return _id_campo; }
            set { _id_campo = value; }
        }
        /// <summary>
        /// Obtiene o establece el nombre del campo.
        /// </summary>
        /// <value>Nombre del campo.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Nombre", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "No colocar espacios.", 2)]
        public string nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }
        /// <summary>
        /// Obtiene o establece el titulo que se muestra para el campo.
        /// </summary>
        /// <value>Titulo del campo.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Titulo", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, null, 3)]
        public string titulo
        {
            get { return _titulo; }
            set { _titulo = value; }
        }
        /// <summary>
        /// Obtiene o establece la clave del tipo de columna del campo.
        /// </summary>
        /// <value>EL tipo de columna.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Tipo", false, false, false, true, Enumerados.TIPO_EDITOR.LISTA, null, "Delta_control", "Delta_control.Base.ControlBase`1=Delta_entidad.EntidadesControl.Cat_tipo_columna", "ObtenerListado|Lista", "id_tipo_columna", "nombre_tipo", null, null, false, 4)]
        public Int16 id_tipo_columna
        {
            get { return _id_tipo_columna; }
            set { _id_tipo_columna = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre del tipo de columna del campo.
        /// </summary>
        /// <value>Nombre del tipo de columna.</value>
        [AttPropiedad("Tipo", true, true, false, false, Enumerados.TIPO_EDITOR.TEXBOX, null, 5)]
        [AttEditor(null, null, null, "Delta_webControl", "Delta_webControl.Templates.LinkTemplate", null, null)]
        public string nombre_tipo_columna
        {
            get { return _nombre_tipo_columna; }
            set { _nombre_tipo_columna = value; }
        }

        /// <summary>
        /// Obtiene o establece la columna EXCEL en la cual se leen los datos del campo al importar datos.
        /// </summary>
        /// <value>Nombre de la columna del campo.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 10, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Columna Excel", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, null, 6)]
        public string columna_doc
        {
            get { return _columna_doc; }
            set { _columna_doc = value; }
        }

        /// <summary>
        /// Obtener o establecer la clave del tipo de filtro usado para el campo.
        /// </summary>
        /// <value>Clave del tipo de filtro.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Filtro", false, false, false, true, Enumerados.TIPO_EDITOR.LISTA, null, "Delta_control", "Delta_control.Base.ControlBase`1=Delta_entidad.EntidadesControl.Cat_filtro_campo", "ObtenerListado|Lista", "id_cat_filtro_campo", "nombre", "-,1", null, false, 7)]
        public Int16? id_cat_filtro_campo
        {
            get { return _id_cat_filtro_campo; }
            set { _id_cat_filtro_campo = value; }
        }

        /// <summary>
        /// Obtiene o establece la clave del tipo general del campo.
        /// </summary>
        /// <value>Clave del tipo general.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR, Enumerados.TIPO_QUERY.OBTENER, Enumerados.TIPO_QUERY.OBTENER_TODOS)]
        [AttPropiedad("id_tipo_gral", false, true, false, true, Enumerados.TIPO_EDITOR.LISTA, null, "Delta_control", "Delta_control.Base.ControlBase`1=Delta_entidad.EntidadesControl.Cat_tipo_gral", "ObtenerListado|Lista", "id_tipo_gral", "nombre", null, null, false, 8)]
        public int id_tipo_gral
        {
            get { return _id_tipo_gral; }
            set { _id_tipo_gral = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre del tipo general al que pertenece el campo.
        /// </summary>
        /// <value>Nombre del tipo general.</value>
        [AttPropiedad("Tipo Entidad", true, true, false, false, Enumerados.TIPO_EDITOR.TEXBOX, null, 9)]
        public string nombre_tipo_gral
        {
            get { return _nombre_tipo_gral; }
            set { _nombre_tipo_gral = value; }
        }

        /// <summary>
        /// Obtiene o establece el nombre del tipo de filtro configurado al campo.
        /// </summary>
        /// <value>Nombre del filtro.</value>
        [AttPropiedad("Filtro", true, true, false, false, Enumerados.TIPO_EDITOR.TEXBOX, null, 10)]
        [AttEditor(null, null, null, "Delta_webControl", "Delta_webControl.Templates.LinkTemplateTFiltro", null, null)]
        public string nombre_filtro
        {
            get;
            set;
        }

        /// <summary>
        /// Obtiene o establece si el campo se debe mostrar en el GridView.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Ver en Tabla", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 11)]
        public bool mostrar_tabla
        {
            get { return _mostrar_tabla; }
            set { _mostrar_tabla = value; }
        }
        /// <summary>
        /// Obtiene o establece el valor que indica si el campo es editable, es decir, si se debe mostrar en el panel de edición.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Editable", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, "Indica si el campo se debe mostrar en el formulario de edición.", 12)]
        public bool editable
        {
            get { return _editable; }
            set { _editable = value; }
        }
        /// <summary>
        /// Obtiene o establece el valor que indica si el campo es dinámico.
        /// </summary>
        /// <value>Indica si el campo es dinámico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input)]
        [AttPropiedad("Es dinamico", true, true, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 13)]
        public bool es_dinamico
        {
            get { return _es_dinamico; }
            set { _es_dinamico = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor que indica si el campo es requerido, si es requerido, se configura automaticamente el validador.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 1, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Es requerido", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 14)]
        public bool requerido
        {
            get { return _requerido; }
            set { _requerido = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor que indica si el campo es de solo lectura.
        /// </summary>
        /// <value>Valor lógico.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Solo Lectura", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 15)]
        public bool solo_lectura
        {
            get { return _solo_lectura; }
            set { _solo_lectura = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor que indica si el campo es virutal, es decir, que solo muestra datos y no persiste en la tabla.
        /// </summary>
        /// <value><c>true</c> if es_virtual; otherwise, <c>false</c>.</value>
        [AttrParametro(System.Data.SqlDbType.Bit, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Es virtual", true, false, false, true, Enumerados.TIPO_EDITOR.CHECK, null, 16)]
        public bool es_virtual
        {
            get;
            set;
        }

        /// <summary>
        /// Obtiene o establece el valor que indica el tamaño maximo que se permite para el campo, uselo cuando el campo es texto, recuerde que el limite no debe superar al de la base de datos.
        /// <br/>Para que el campo no tenga limite, coloque 0.
        /// </summary>
        /// <value>Tamaño del campo.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Tamaño", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "0 Para indicar que el campo no tiene limite.", 17)]
        public Int16 tamanio
        {
            get { return _tamanio; }
            set { _tamanio = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor que indica los campos de los cuales depende este campo.
        /// </summary>
        /// <value>Campos de los que depende el campo.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Dependencias", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, "Nombre de los campos de los cuales depende este campo, separar con coma (,).<br />Las dependencias deben ir antes de este campo", 18)]
        public string dependencia
        {
            get { return _dependencia; }
            set { _dependencia = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor del comentario que se muestra en el panel de edición.
        /// </summary>
        /// <value>Comentarios del campo.</value>
        [AttrParametro(System.Data.SqlDbType.VarChar, 100, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Comentario", true, false, false, true, Enumerados.TIPO_EDITOR.TEXTBOX_MULTILINEA, null, 19)]
        public string comentario
        {
            get { return _comentario; }
            set { _comentario = value; }
        }


        /// <summary>
        /// Obtiene o establec el orden que le corresponde a este campo.
        /// </summary>
        /// <value>Orden del campo.</value>
        [AttrParametro(System.Data.SqlDbType.SmallInt, 4, null, System.Data.ParameterDirection.Input, Enumerados.TIPO_QUERY.INSERTAR)]
        [AttPropiedad("Orden", true, false, false, true, Enumerados.TIPO_EDITOR.TEXBOX, null, 20)]
        public Int16 orden
        {
            get { return _orden; }
            set { _orden = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor que contiene la configuración del tipo de columna asignado al campo.
        /// </summary>
        /// <value>Configuración del tipo de columna.</value>
        public Cat_tipo_columna tipo
        {

            get
            {
                if (_tipo == null)
                    _tipo = new Cat_tipo_columna();
                return _tipo;
            }
            set { _tipo = value; }
        }
        /// <summary>
        /// Obtiene o establece el valor de la configuración del tipo de editor asignado al campo.
        /// </summary>
        /// <value>Configuración del tipo de editor configurado al campo.</value>
        public Cat_editor tipo_editor
        {

            get
            {
                if (_tipo_editor == null)
                    _tipo_editor = new Cat_editor();
                return
                _tipo_editor;
            }
            set { _tipo_editor = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor de la configuración del filtro asignado al campo.
        /// </summary>
        /// <value>Configuración del filtro del campo.</value>
        public Cat_filtro_campo filtro
        {

            get
            {
                if (_filtro == null)
                    _filtro = new Cat_filtro_campo();
                return
                _filtro;
            }
            set { _filtro = value; }
        }

        /// <summary>
        /// Obtiene o establece el valor de la configuración del editor usado en el panel de filtro.
        /// </summary>
        /// <value>Configuración del editor del panel de filtro.</value>
        public Cat_editor editorFiltro
        {

            get
            {
                if (_editorFiltro == null)
                    _editorFiltro = new Cat_editor();
                return _editorFiltro;
            }
            set { _editorFiltro = value; }
        }


    }
}